package com.ma.chapter7;

import lombok.extern.slf4j.Slf4j;

/**
 * @ClassName FinalTest
 * @Author: mayongqiang
 * @DATE 2022/3/20 11:51
 * @Description: 关键字final原理
 */
@Slf4j(topic = "FinalTest")
public class FinalTest {

    final static int A = 10;
    final static int B = Short.MAX_VALUE + 1;


    final int a = 20;
    final int b = Integer.MAX_VALUE + 1;

    final void test(){
        UseFinal1 useFinal1 = new UseFinal1();
        useFinal1.test();
    }

}

class UseFinal1{
    public void test(){
        /*
        * final static 方法区的常量池中 直接复制一份，在方法栈内存中取   编译器优化-->常量传播
        * static   不加final  去别的类去取，在堆中，走共享内存，效率相对低
        * */
        System.out.println(FinalTest.A);
        System.out.println(FinalTest.B);
        System.out.println(new FinalTest().a);
        System.out.println(new FinalTest().b);
    }
}

class UseFinal2{
    public void test(){
        System.out.println(FinalTest.A);
    }
}